package resp

import (
	"fly/helper"
	"fly/req"
)

// SysDeptResp 添加部门结果
type SysDeptResp struct {
	BaseModelResp
	Id       int64      `json:"id"`
	Name     string     `json:"name" description:"名称"`
	Pid      int64      `json:"pid" description:"上级ID，一级菜单为0"`
	Sort     int        `json:"sort" description:"排序"`
	Status   int        `json:"status" description:"状态"`
	Children []TreeNode `json:"children"`
}

func (s *SysDeptResp) GetPId() int64 {
	return s.Pid
}

func (s *SysDeptResp) GetId() int64 {
	return s.Id
}

func (s *SysDeptResp) GetSort() int {
	return s.Sort
}

func (s *SysDeptResp) AddChildren(node TreeNode) {
	//s.Children = append(s.Children, node)
	if len(s.Children) == 0 {
		s.Children = append(s.Children, node)
		return
	}
	// 二分查找合适的位置
	low := FindInsert(node, s.Children)
	// 插入节点
	s.Children = append(s.Children[:low], append([]TreeNode{node}, s.Children[low:]...)...)
}

func DeptList2Tree(list []SysDeptResp) []TreeNode {
	nodes := make([]TreeNode, len(list))
	for i, item := range list {
		node := SysDeptResp{}
		_ = helper.CopyDeep(&node, item)
		nodes[i] = &node
	}
	return NodeList2Tree(nodes)
}

// SysMenuResp 添加菜单是结果
type SysMenuResp struct {
	BaseModelResp
	Id          int64      `json:"id"`
	Name        string     `json:"name"  description:"名称"`
	Url         string     `json:"url" description:"菜单URL"`
	Permissions string     `json:"permissions" description:"授权(多个用逗号分隔，如：sys:user:list,sys:user:save)"`
	Pid         int64      `json:"pid" description:"上级ID，一级菜单为0"`
	MenuType    int        `json:"menuType" description:"类型   0：菜单   1：按钮"`
	Icon        string     `json:"icon" description:"菜单图标"`
	Sort        int        `json:"sort" description:"排序"`
	Status      int        `json:"status" description:"状态"`
	Children    []TreeNode `json:"children"`
}

func (s *SysMenuResp) GetPId() int64 {
	return s.Pid
}

func (s *SysMenuResp) GetId() int64 {
	return s.Id
}

func (s *SysMenuResp) GetSort() int {
	return s.Sort
}

func (s *SysMenuResp) AddChildren(node TreeNode) {
	if len(s.Children) == 0 {
		s.Children = append(s.Children, node)
		return
	}
	// 二分查找合适的位置
	low := FindInsert(node, s.Children)
	// 插入节点
	s.Children = append(s.Children[:low], append([]TreeNode{node}, s.Children[low:]...)...)
}

func MenuList2Tree(list []SysMenuResp) []TreeNode {
	nodes := make([]TreeNode, len(list))
	for i, item := range list {
		node := SysMenuResp{}
		_ = helper.CopyDeep(&node, item)
		nodes[i] = &node
	}
	return NodeList2Tree(nodes)
}

// SysRoleResp 添加角色结果
type SysRoleResp struct {
	BaseModelResp
	req.AddRoleReq
}

type SysDictResp struct {
	BaseModelResp
	req.AddSysDictReq
}

type SysUserResp struct {
	BaseModelResp
	Id         int64   `json:"id"`
	Username   string  `json:"username"  valid:"Required;" description:"用户名"`
	RealName   string  `json:"realName"  valid:"Required;" description:"姓名"`
	HeadUrl    string  `json:"headUrl" description:"头像"`
	Gender     int     `json:"gender" description:"用户性别，0: 未知；1:男性；2:女性"`
	PersonCode string  `json:"personCode" description:"人员编号"`
	DeptId     int64   `json:"deptId"  valid:"Required;" description:"部门ID"`
	DeptName   string  `json:"deptName"  valid:"Required;" description:"部门ID"`
	SuperAdmin int     `json:"superAdmin" description:"超级管理员 0：否 1：是"`
	Status     int     `json:"status" description:"状态  0：停用    1：正常"`
	RoleIdList []int64 `json:"roleIdList" description:"角色ID列表"`
}

type LoginResp struct {
	Token    string `json:"token" description:"token"`
	UserId   int64  `json:"userId" description:"用户id"`
	UserName string `json:"userName" description:"用户名"`
	Expire   int64  `json:"expire" description:"过期时间,时间戳ms"`
}
